<?php
App::uses('AppController', 'Controller');
/**
 * Equipamentos Controller
 *
 * @property Equipamento $Equipamento
 */
class EquipamentosController extends AppController {

	public $paginate = array();

/**
 * index method
 *
 * @return void
 */
	public function index() {
		$this->Equipamento->recursive = 0;
		$this->set('equipamentos', $this->paginate());
		
		$categorias = $this->Equipamento->Categoria->find('list');
		$localizacaos = $this->Equipamento->Localizacao->find('list');
		$projetos = $this->Equipamento->Projeto->find('list');
		$this->set(compact('categorias', 'localizacaos', 'projetos'));
	}

/**
 * view method
 *
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		$this->Equipamento->id = $id;
		if (!$this->Equipamento->exists()) {
			throw new NotFoundException(__('Invalid equipamento'));
		}
		//$this->Equipamento->recursive = -1;
		$equipamento = $this->Equipamento->read(null, $id);
		$equipamento['Image'] = $this->Equipamento->Image->find('all', array(
			'conditions' => array('equipamento_id' => $equipamento['Equipamento']['id'] ),
			'recursive' => -1)
		);
		
		$this->set(compact('equipamento'));		
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		if ($this->request->is('post')) {
			$this->Equipamento->create();
			$anexo_valido = $this->anexar();
			if ($anexo_valido && $this->Equipamento->save($this->request->data)) {
				foreach($this->data['Image'] as $image){
					$this->Equipamento->Image->create();
					$image['equipamento_id'] = $this->Equipamento->id;
					$save_image = $this->Equipamento->Image->save($image);
				}
				$this->Session->setFlash(__('O equipamento foi criado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('O equipamento não pode ser criado, favor tentar novamente.'), 'flash_error');
			}
		}
		$categorias = $this->Equipamento->Categoria->find('list');
		$localizacaos = $this->Equipamento->Localizacao->find('list');
		$projetos = $this->Equipamento->Projeto->find('list');
		$this->set(compact('categorias', 'localizacaos', 'projetos'));
	}

/**
 * edit method
 *
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		$this->Equipamento->id = $id;
		if (!$this->Equipamento->exists()) {
			throw new NotFoundException(__('Invalid equipamento'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			$anexo_valido = $this->anexar();
			if ($anexo_valido && $this->Equipamento->save($this->request->data)) {
				foreach($this->data['Image'] as $image){
					$this->Equipamento->Image->create();
					$image['equipamento_id'] = $this->Equipamento->id;
					$save_image = $this->Equipamento->Image->save($image);
				}				
				$this->Session->setFlash(__('O equipamento foi alterado com sucesso.'), 'flash_success');
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('O equipamento não pode ser alterado, favor tentar novamente.'), 'flash_error');
			}
		} else {
			$this->request->data = $this->Equipamento->read(null, $id);
		}
		$categorias = $this->Equipamento->Categoria->find('list');
		$projetos = $this->Equipamento->Projeto->find('list');
		$localizacaos = $this->Equipamento->Localizacao->find('list');
		$this->set(compact('categorias', 'localizacaos', 'projetos'));
	}

/**
 * delete method
 *
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Equipamento->id = $id;
		if (!$this->Equipamento->exists()) {
			throw new NotFoundException(__('Invalid equipamento'));
		}
		if ($this->Equipamento->delete()) {
			$this->Session->setFlash(__('O equipamento foi removido com sucesso'), 'flash_success');
			$this->redirect(array('action' => 'index'));
		}
		$this->Session->setFlash(__('O equipamento não pode ser removido'), 'flash_error');
		$this->redirect(array('action' => 'index'));
	}
	
	
	/**
	 * add method
	 *
	 * @return void
	 */
	public function search() {
		if ($this->request->is('post')) {
			$this->Equipamento->create();
			if ($this->Equipamento->saveAll($this->request->data)) {
				$this->Session->setFlash(__('O equipamento foi criado com sucesso.'));
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('O equipamento não pode ser criado, favor tentar novamente.'));
			}
		}
		$this->set('equipamentos', $this->paginate());
		$categorias = $this->Equipamento->Categoria->find('list');
		$localizacaos = $this->Equipamento->Localizacao->find('list');
		$projetos = $this->Equipamento->Projeto->find('list');
		$this->set(compact('categorias', 'localizacaos', 'projetos'));
	}
	
	
	public function autocomplete() {
		$this->autoRender = false;
		
		$term = $this->request->query['q'];
		$equipamentos = $this->Equipamento->find('all', array(
			'conditions' => array(
				'OR' => array(
					'Equipamento.id' => $term,
					'Equipamento.descricao LIKE' => '%'.$term.'%'
				)
			)
		));
		
		// Format the result for select2
		$result = array();
		foreach($equipamentos as $key => $equip) {
			$result[] = array(
				'id' => $equip['Equipamento']['id'],
				'text' => $equip['Equipamento']['id'] . ' - ' .$equip['Equipamento']['descricao']
			);
		}
		$equipamentos = $result;
		
		echo json_encode($equipamentos);
	}
	
	/**
	 * Acao executada em add() e edit() para recuperar lista de arquivos anexados
	 */
	private function anexar(){
		$anexo_valido = true;
		if(isset($this->request->data['Equipamento']['anexo']) && is_array($this->request->data['Equipamento']) && !empty($this->request->data['Equipamento']['anexo'])) {
			foreach($this->request->data['Equipamento']['anexo'] as $anexo){
				if($anexo['error'] != UPLOAD_ERR_NO_FILE){
					if(!isset($this->request->data['Image']))
						$this->request->data['Image'] = array();
	
					array_push($this->request->data['Image'], array(
						//'equipamento_id' => $this->request->data['Equipamento']['id'],
						'File' => $anexo
					));
	
					$this->Equipamento->Image->set(array(
							//'equipamento_id' => $this->request->data['Equipamento']['id'],
							'File' => $anexo));
					if(!$this->Equipamento->Image->validates(array('fieldList' => array('File')))){
						$this->Equipamento->invalidate('anexo', $this->Equipamento->Image->validate['File']['file_type']['message']);
						$anexo_valido = false;
						break;
					}
				}
					
			}
			if($anexo_valido)
				unset($this->request->data['Equipamento']['anexo']);
			else
				unset($this->request->data['Image']);
		}
		return $anexo_valido;
	}	
}
